#pragma once

#ifndef CAMERAAGENT_H_
#define CAMERAAGENT_H_

#include "Agent.h"
#include "NestAgent.h"
#include "GUICamera.h"
#include "Enums.h"
#include <string>

class NestAgent;
class GUICamera;

class CameraAgent : public Agent, public Camera
{
private:
	GUICamera* guiCamera;
	std::vector<NestAgent*> nests;
	PartType partType;
	static bool isTakingPicture;
	
public:
	CameraAgent(std::string); 
	~CameraAgent();

	Picture p;
	enum CameraState {None, TakingPicture};
	CameraState state;

	//Messages
	
	//From Nest
	void msgIThinkImFull(PartType partType);

	//Printable Interface
	virtual std::string toString() const;

	virtual bool pickAndExecuteAnAction();

	//Actions

	void takePicture();
	//To Nest
	void givePictureToNest();
	//To GUI
	void tellGUIToTakePicture();

	// Setters

	void setNest (NestAgent*);
	void setGUI (GUICamera*);

	// Non-normative
	void handleBreak();
	void handleFix();

};

#endif
